﻿/*************************************************************
 * Ultimate WebAssembly Virtual Machine (Version 2)          *
 * Copyright (c) 2025-present UlteSoft. All rights reserved. *
 * Licensed under the APL-2.0 License (see LICENSE file).    *
 *************************************************************/

/**
 * @author      MacroModel
 * @version     2.0.0
 * @date        2025-03-23
 * @copyright   APL-2.0 License
 */

/****************************************
 *  _   _ __        ____     __ __  __  *
 * | | | |\ \      / /\ \   / /|  \/  | *
 * | | | | \ \ /\ / /  \ \ / / | |\/| | *
 * | |_| |  \ V  V /    \ V /  | |  | | *
 *  \___/    \_/\_/      \_/   |_|  |_| *
 *                                      *
 ****************************************/

/// @brief      The following are the macros used by ansi escape sequences.
/// @details    Use `push_macro` to avoid side effects on existing macros. Please use `pop_macro` in conjunction.

// #pragma once

///
/// UTF-32
///
#pragma pop_macro("UWVM_AES_U32_RGB")

#pragma pop_macro("UWVM_AES_U32_CTRL_SCRS")
#pragma pop_macro("UWVM_AES_U32_CTRL_HCRS")

#pragma pop_macro("UWVM_AES_U32_RST_CROSS")
#pragma pop_macro("UWVM_AES_U32_RST_INVISIABLE")
#pragma pop_macro("UWVM_AES_U32_RST_INVERSE")
#pragma pop_macro("UWVM_AES_U32_RST_BLINK")
#pragma pop_macro("UWVM_AES_U32_RST_UNDERLINE")
#pragma pop_macro("UWVM_AES_U32_RST_ITALICS")
#pragma pop_macro("UWVM_AES_U32_RST_BD_FT")
#pragma pop_macro("UWVM_AES_U32_RST_BD_COLOR")
#pragma pop_macro("UWVM_AES_U32_RST_BG_COLOR")
#pragma pop_macro("UWVM_AES_U32_RST_COLOR")
#pragma pop_macro("UWVM_AES_U32_RST_ALL")

#pragma pop_macro("UWVM_AES_U32_STY_DOUBLE_UNDERLINE")
#pragma pop_macro("UWVM_AES_U32_STY_CROSSED")
#pragma pop_macro("UWVM_AES_U32_STY_INVISIABLE")
#pragma pop_macro("UWVM_AES_U32_STY_INVERSE")
#pragma pop_macro("UWVM_AES_U32_STY_BLINK")
#pragma pop_macro("UWVM_AES_U32_STY_UNDERLINE")
#pragma pop_macro("UWVM_AES_U32_STY_ITALICS")
#pragma pop_macro("UWVM_AES_U32_STY_FAINT")
#pragma pop_macro("UWVM_AES_U32_STY_BOLD")

#pragma pop_macro("UWVM_AES_U32_BD_GRAY")
#pragma pop_macro("UWVM_AES_U32_BD_CYAN")
#pragma pop_macro("UWVM_AES_U32_BD_PURPLE")
#pragma pop_macro("UWVM_AES_U32_BD_BLUE")
#pragma pop_macro("UWVM_AES_U32_BD_ORANGE")
#pragma pop_macro("UWVM_AES_U32_BD_GREEN")
#pragma pop_macro("UWVM_AES_U32_BD_RED")
#pragma pop_macro("UWVM_AES_U32_BD_BLACK")

#pragma pop_macro("UWVM_AES_U32_BG_WHITE")
#pragma pop_macro("UWVM_AES_U32_BG_LT_CYAN")
#pragma pop_macro("UWVM_AES_U32_BG_LT_PURPLE")
#pragma pop_macro("UWVM_AES_U32_BG_LT_BLUE")
#pragma pop_macro("UWVM_AES_U32_BG_YELLOW")
#pragma pop_macro("UWVM_AES_U32_BG_LT_GREEN")
#pragma pop_macro("UWVM_AES_U32_BG_LT_RED")
#pragma pop_macro("UWVM_AES_U32_BG_DK_GRAY")
#pragma pop_macro("UWVM_AES_U32_BG_GRAY")
#pragma pop_macro("UWVM_AES_U32_BG_CYAN")
#pragma pop_macro("UWVM_AES_U32_BG_PURPLE")
#pragma pop_macro("UWVM_AES_U32_BG_BLUE")
#pragma pop_macro("UWVM_AES_U32_BG_ORANGE")
#pragma pop_macro("UWVM_AES_U32_BG_GREEN")
#pragma pop_macro("UWVM_AES_U32_BG_RED")
#pragma pop_macro("UWVM_AES_U32_BG_BLACK")

#pragma pop_macro("UWVM_AES_U32_WHITE")
#pragma pop_macro("UWVM_AES_U32_LT_CYAN")
#pragma pop_macro("UWVM_AES_U32_LT_PURPLE")
#pragma pop_macro("UWVM_AES_U32_LT_BLUE")
#pragma pop_macro("UWVM_AES_U32_YELLOW")
#pragma pop_macro("UWVM_AES_U32_LT_GREEN")
#pragma pop_macro("UWVM_AES_U32_LT_RED")
#pragma pop_macro("UWVM_AES_U32_DK_GRAY")
#pragma pop_macro("UWVM_AES_U32_GRAY")
#pragma pop_macro("UWVM_AES_U32_CYAN")
#pragma pop_macro("UWVM_AES_U32_PURPLE")
#pragma pop_macro("UWVM_AES_U32_BLUE")
#pragma pop_macro("UWVM_AES_U32_ORANGE")
#pragma pop_macro("UWVM_AES_U32_GREEN")
#pragma pop_macro("UWVM_AES_U32_RED")
#pragma pop_macro("UWVM_AES_U32_BLACK")

///
/// UTF-16
///
#pragma pop_macro("UWVM_AES_U16_RGB")

#pragma pop_macro("UWVM_AES_U16_CTRL_SCRS")
#pragma pop_macro("UWVM_AES_U16_CTRL_HCRS")

#pragma pop_macro("UWVM_AES_U16_RST_CROSS")
#pragma pop_macro("UWVM_AES_U16_RST_INVISIABLE")
#pragma pop_macro("UWVM_AES_U16_RST_INVERSE")
#pragma pop_macro("UWVM_AES_U16_RST_BLINK")
#pragma pop_macro("UWVM_AES_U16_RST_UNDERLINE")
#pragma pop_macro("UWVM_AES_U16_RST_ITALICS")
#pragma pop_macro("UWVM_AES_U16_RST_BD_FT")
#pragma pop_macro("UWVM_AES_U16_RST_BD_COLOR")
#pragma pop_macro("UWVM_AES_U16_RST_BG_COLOR")
#pragma pop_macro("UWVM_AES_U16_RST_COLOR")
#pragma pop_macro("UWVM_AES_U16_RST_ALL")

#pragma pop_macro("UWVM_AES_U16_STY_DOUBLE_UNDERLINE")
#pragma pop_macro("UWVM_AES_U16_STY_CROSSED")
#pragma pop_macro("UWVM_AES_U16_STY_INVISIABLE")
#pragma pop_macro("UWVM_AES_U16_STY_INVERSE")
#pragma pop_macro("UWVM_AES_U16_STY_BLINK")
#pragma pop_macro("UWVM_AES_U16_STY_UNDERLINE")
#pragma pop_macro("UWVM_AES_U16_STY_ITALICS")
#pragma pop_macro("UWVM_AES_U16_STY_FAINT")
#pragma pop_macro("UWVM_AES_U16_STY_BOLD")

#pragma pop_macro("UWVM_AES_U16_BD_GRAY")
#pragma pop_macro("UWVM_AES_U16_BD_CYAN")
#pragma pop_macro("UWVM_AES_U16_BD_PURPLE")
#pragma pop_macro("UWVM_AES_U16_BD_BLUE")
#pragma pop_macro("UWVM_AES_U16_BD_ORANGE")
#pragma pop_macro("UWVM_AES_U16_BD_GREEN")
#pragma pop_macro("UWVM_AES_U16_BD_RED")
#pragma pop_macro("UWVM_AES_U16_BD_BLACK")

#pragma pop_macro("UWVM_AES_U16_BG_WHITE")
#pragma pop_macro("UWVM_AES_U16_BG_LT_CYAN")
#pragma pop_macro("UWVM_AES_U16_BG_LT_PURPLE")
#pragma pop_macro("UWVM_AES_U16_BG_LT_BLUE")
#pragma pop_macro("UWVM_AES_U16_BG_YELLOW")
#pragma pop_macro("UWVM_AES_U16_BG_LT_GREEN")
#pragma pop_macro("UWVM_AES_U16_BG_LT_RED")
#pragma pop_macro("UWVM_AES_U16_BG_DK_GRAY")
#pragma pop_macro("UWVM_AES_U16_BG_GRAY")
#pragma pop_macro("UWVM_AES_U16_BG_CYAN")
#pragma pop_macro("UWVM_AES_U16_BG_PURPLE")
#pragma pop_macro("UWVM_AES_U16_BG_BLUE")
#pragma pop_macro("UWVM_AES_U16_BG_ORANGE")
#pragma pop_macro("UWVM_AES_U16_BG_GREEN")
#pragma pop_macro("UWVM_AES_U16_BG_RED")
#pragma pop_macro("UWVM_AES_U16_BG_BLACK")

#pragma pop_macro("UWVM_AES_U16_WHITE")
#pragma pop_macro("UWVM_AES_U16_LT_CYAN")
#pragma pop_macro("UWVM_AES_U16_LT_PURPLE")
#pragma pop_macro("UWVM_AES_U16_LT_BLUE")
#pragma pop_macro("UWVM_AES_U16_YELLOW")
#pragma pop_macro("UWVM_AES_U16_LT_GREEN")
#pragma pop_macro("UWVM_AES_U16_LT_RED")
#pragma pop_macro("UWVM_AES_U16_DK_GRAY")
#pragma pop_macro("UWVM_AES_U16_GRAY")
#pragma pop_macro("UWVM_AES_U16_CYAN")
#pragma pop_macro("UWVM_AES_U16_PURPLE")
#pragma pop_macro("UWVM_AES_U16_BLUE")
#pragma pop_macro("UWVM_AES_U16_ORANGE")
#pragma pop_macro("UWVM_AES_U16_GREEN")
#pragma pop_macro("UWVM_AES_U16_RED")
#pragma pop_macro("UWVM_AES_U16_BLACK")

///
/// UTF-8
///
#pragma pop_macro("UWVM_AES_U8_RGB")

#pragma pop_macro("UWVM_AES_U8_CTRL_SCRS")
#pragma pop_macro("UWVM_AES_U8_CTRL_HCRS")

#pragma pop_macro("UWVM_AES_U8_RST_CROSS")
#pragma pop_macro("UWVM_AES_U8_RST_INVISIABLE")
#pragma pop_macro("UWVM_AES_U8_RST_INVERSE")
#pragma pop_macro("UWVM_AES_U8_RST_BLINK")
#pragma pop_macro("UWVM_AES_U8_RST_UNDERLINE")
#pragma pop_macro("UWVM_AES_U8_RST_ITALICS")
#pragma pop_macro("UWVM_AES_U8_RST_BD_FT")
#pragma pop_macro("UWVM_AES_U8_RST_BD_COLOR")
#pragma pop_macro("UWVM_AES_U8_RST_BG_COLOR")
#pragma pop_macro("UWVM_AES_U8_RST_COLOR")
#pragma pop_macro("UWVM_AES_U8_RST_ALL")

#pragma pop_macro("UWVM_AES_U8_STY_DOUBLE_UNDERLINE")
#pragma pop_macro("UWVM_AES_U8_STY_CROSSED")
#pragma pop_macro("UWVM_AES_U8_STY_INVISIABLE")
#pragma pop_macro("UWVM_AES_U8_STY_INVERSE")
#pragma pop_macro("UWVM_AES_U8_STY_BLINK")
#pragma pop_macro("UWVM_AES_U8_STY_UNDERLINE")
#pragma pop_macro("UWVM_AES_U8_STY_ITALICS")
#pragma pop_macro("UWVM_AES_U8_STY_FAINT")
#pragma pop_macro("UWVM_AES_U8_STY_BOLD")

#pragma pop_macro("UWVM_AES_U8_BD_GRAY")
#pragma pop_macro("UWVM_AES_U8_BD_CYAN")
#pragma pop_macro("UWVM_AES_U8_BD_PURPLE")
#pragma pop_macro("UWVM_AES_U8_BD_BLUE")
#pragma pop_macro("UWVM_AES_U8_BD_ORANGE")
#pragma pop_macro("UWVM_AES_U8_BD_GREEN")
#pragma pop_macro("UWVM_AES_U8_BD_RED")
#pragma pop_macro("UWVM_AES_U8_BD_BLACK")

#pragma pop_macro("UWVM_AES_U8_BG_WHITE")
#pragma pop_macro("UWVM_AES_U8_BG_LT_CYAN")
#pragma pop_macro("UWVM_AES_U8_BG_LT_PURPLE")
#pragma pop_macro("UWVM_AES_U8_BG_LT_BLUE")
#pragma pop_macro("UWVM_AES_U8_BG_YELLOW")
#pragma pop_macro("UWVM_AES_U8_BG_LT_GREEN")
#pragma pop_macro("UWVM_AES_U8_BG_LT_RED")
#pragma pop_macro("UWVM_AES_U8_BG_DK_GRAY")
#pragma pop_macro("UWVM_AES_U8_BG_GRAY")
#pragma pop_macro("UWVM_AES_U8_BG_CYAN")
#pragma pop_macro("UWVM_AES_U8_BG_PURPLE")
#pragma pop_macro("UWVM_AES_U8_BG_BLUE")
#pragma pop_macro("UWVM_AES_U8_BG_ORANGE")
#pragma pop_macro("UWVM_AES_U8_BG_GREEN")
#pragma pop_macro("UWVM_AES_U8_BG_RED")
#pragma pop_macro("UWVM_AES_U8_BG_BLACK")

#pragma pop_macro("UWVM_AES_U8_WHITE")
#pragma pop_macro("UWVM_AES_U8_LT_CYAN")
#pragma pop_macro("UWVM_AES_U8_LT_PURPLE")
#pragma pop_macro("UWVM_AES_U8_LT_BLUE")
#pragma pop_macro("UWVM_AES_U8_YELLOW")
#pragma pop_macro("UWVM_AES_U8_LT_GREEN")
#pragma pop_macro("UWVM_AES_U8_LT_RED")
#pragma pop_macro("UWVM_AES_U8_DK_GRAY")
#pragma pop_macro("UWVM_AES_U8_GRAY")
#pragma pop_macro("UWVM_AES_U8_CYAN")
#pragma pop_macro("UWVM_AES_U8_PURPLE")
#pragma pop_macro("UWVM_AES_U8_BLUE")
#pragma pop_macro("UWVM_AES_U8_ORANGE")
#pragma pop_macro("UWVM_AES_U8_GREEN")
#pragma pop_macro("UWVM_AES_U8_RED")
#pragma pop_macro("UWVM_AES_U8_BLACK")

///
/// WCHAR
///
#pragma pop_macro("UWVM_AES_W_RGB")

#pragma pop_macro("UWVM_AES_W_CTRL_SCRS")
#pragma pop_macro("UWVM_AES_W_CTRL_HCRS")

#pragma pop_macro("UWVM_AES_W_RST_CROSS")
#pragma pop_macro("UWVM_AES_W_RST_INVISIABLE")
#pragma pop_macro("UWVM_AES_W_RST_INVERSE")
#pragma pop_macro("UWVM_AES_W_RST_BLINK")
#pragma pop_macro("UWVM_AES_W_RST_UNDERLINE")
#pragma pop_macro("UWVM_AES_W_RST_ITALICS")
#pragma pop_macro("UWVM_AES_W_RST_BD_FT")
#pragma pop_macro("UWVM_AES_W_RST_BD_COLOR")
#pragma pop_macro("UWVM_AES_W_RST_BG_COLOR")
#pragma pop_macro("UWVM_AES_W_RST_COLOR")
#pragma pop_macro("UWVM_AES_W_RST_ALL")

#pragma pop_macro("UWVM_AES_W_STY_DOUBLE_UNDERLINE")
#pragma pop_macro("UWVM_AES_W_STY_CROSSED")
#pragma pop_macro("UWVM_AES_W_STY_INVISIABLE")
#pragma pop_macro("UWVM_AES_W_STY_INVERSE")
#pragma pop_macro("UWVM_AES_W_STY_BLINK")
#pragma pop_macro("UWVM_AES_W_STY_UNDERLINE")
#pragma pop_macro("UWVM_AES_W_STY_ITALICS")
#pragma pop_macro("UWVM_AES_W_STY_FAINT")
#pragma pop_macro("UWVM_AES_W_STY_BOLD")

#pragma pop_macro("UWVM_AES_W_BD_GRAY")
#pragma pop_macro("UWVM_AES_W_BD_CYAN")
#pragma pop_macro("UWVM_AES_W_BD_PURPLE")
#pragma pop_macro("UWVM_AES_W_BD_BLUE")
#pragma pop_macro("UWVM_AES_W_BD_ORANGE")
#pragma pop_macro("UWVM_AES_W_BD_GREEN")
#pragma pop_macro("UWVM_AES_W_BD_RED")
#pragma pop_macro("UWVM_AES_W_BD_BLACK")

#pragma pop_macro("UWVM_AES_W_BG_WHITE")
#pragma pop_macro("UWVM_AES_W_BG_LT_CYAN")
#pragma pop_macro("UWVM_AES_W_BG_LT_PURPLE")
#pragma pop_macro("UWVM_AES_W_BG_LT_BLUE")
#pragma pop_macro("UWVM_AES_W_BG_YELLOW")
#pragma pop_macro("UWVM_AES_W_BG_LT_GREEN")
#pragma pop_macro("UWVM_AES_W_BG_LT_RED")
#pragma pop_macro("UWVM_AES_W_BG_DK_GRAY")
#pragma pop_macro("UWVM_AES_W_BG_GRAY")
#pragma pop_macro("UWVM_AES_W_BG_CYAN")
#pragma pop_macro("UWVM_AES_W_BG_PURPLE")
#pragma pop_macro("UWVM_AES_W_BG_BLUE")
#pragma pop_macro("UWVM_AES_W_BG_ORANGE")
#pragma pop_macro("UWVM_AES_W_BG_GREEN")
#pragma pop_macro("UWVM_AES_W_BG_RED")
#pragma pop_macro("UWVM_AES_W_BG_BLACK")

#pragma pop_macro("UWVM_AES_W_WHITE")
#pragma pop_macro("UWVM_AES_W_LT_CYAN")
#pragma pop_macro("UWVM_AES_W_LT_PURPLE")
#pragma pop_macro("UWVM_AES_W_LT_BLUE")
#pragma pop_macro("UWVM_AES_W_YELLOW")
#pragma pop_macro("UWVM_AES_W_LT_GREEN")
#pragma pop_macro("UWVM_AES_W_LT_RED")
#pragma pop_macro("UWVM_AES_W_DK_GRAY")
#pragma pop_macro("UWVM_AES_W_GRAY")
#pragma pop_macro("UWVM_AES_W_CYAN")
#pragma pop_macro("UWVM_AES_W_PURPLE")
#pragma pop_macro("UWVM_AES_W_BLUE")
#pragma pop_macro("UWVM_AES_W_ORANGE")
#pragma pop_macro("UWVM_AES_W_GREEN")
#pragma pop_macro("UWVM_AES_W_RED")
#pragma pop_macro("UWVM_AES_W_BLACK")

///
/// CHAR
///
#pragma pop_macro("UWVM_AES_RGB")

#pragma pop_macro("UWVM_AES_CTRL_SCRS")
#pragma pop_macro("UWVM_AES_CTRL_HCRS")

#pragma pop_macro("UWVM_AES_RST_CROSS")
#pragma pop_macro("UWVM_AES_RST_INVISIABLE")
#pragma pop_macro("UWVM_AES_RST_INVERSE")
#pragma pop_macro("UWVM_AES_RST_BLINK")
#pragma pop_macro("UWVM_AES_RST_UNDERLINE")
#pragma pop_macro("UWVM_AES_RST_ITALICS")
#pragma pop_macro("UWVM_AES_RST_BD_FT")
#pragma pop_macro("UWVM_AES_RST_BD_COLOR")
#pragma pop_macro("UWVM_AES_RST_BG_COLOR")
#pragma pop_macro("UWVM_AES_RST_COLOR")
#pragma pop_macro("UWVM_AES_RST_ALL")

#pragma pop_macro("UWVM_AES_STY_DOUBLE_UNDERLINE")
#pragma pop_macro("UWVM_AES_STY_CROSSED")
#pragma pop_macro("UWVM_AES_STY_INVISIABLE")
#pragma pop_macro("UWVM_AES_STY_INVERSE")
#pragma pop_macro("UWVM_AES_STY_BLINK")
#pragma pop_macro("UWVM_AES_STY_UNDERLINE")
#pragma pop_macro("UWVM_AES_STY_ITALICS")
#pragma pop_macro("UWVM_AES_STY_FAINT")
#pragma pop_macro("UWVM_AES_STY_BOLD")

#pragma pop_macro("UWVM_AES_BD_GRAY")
#pragma pop_macro("UWVM_AES_BD_CYAN")
#pragma pop_macro("UWVM_AES_BD_PURPLE")
#pragma pop_macro("UWVM_AES_BD_BLUE")
#pragma pop_macro("UWVM_AES_BD_ORANGE")
#pragma pop_macro("UWVM_AES_BD_GREEN")
#pragma pop_macro("UWVM_AES_BD_RED")
#pragma pop_macro("UWVM_AES_BD_BLACK")

#pragma pop_macro("UWVM_AES_BG_WHITE")
#pragma pop_macro("UWVM_AES_BG_LT_CYAN")
#pragma pop_macro("UWVM_AES_BG_LT_PURPLE")
#pragma pop_macro("UWVM_AES_BG_LT_BLUE")
#pragma pop_macro("UWVM_AES_BG_YELLOW")
#pragma pop_macro("UWVM_AES_BG_LT_GREEN")
#pragma pop_macro("UWVM_AES_BG_LT_RED")
#pragma pop_macro("UWVM_AES_BG_DK_GRAY")
#pragma pop_macro("UWVM_AES_BG_GRAY")
#pragma pop_macro("UWVM_AES_BG_CYAN")
#pragma pop_macro("UWVM_AES_BG_PURPLE")
#pragma pop_macro("UWVM_AES_BG_BLUE")
#pragma pop_macro("UWVM_AES_BG_ORANGE")
#pragma pop_macro("UWVM_AES_BG_GREEN")
#pragma pop_macro("UWVM_AES_BG_RED")
#pragma pop_macro("UWVM_AES_BG_BLACK")

#pragma pop_macro("UWVM_AES_WHITE")
#pragma pop_macro("UWVM_AES_LT_CYAN")
#pragma pop_macro("UWVM_AES_LT_PURPLE")
#pragma pop_macro("UWVM_AES_LT_BLUE")
#pragma pop_macro("UWVM_AES_YELLOW")
#pragma pop_macro("UWVM_AES_LT_GREEN")
#pragma pop_macro("UWVM_AES_LT_RED")
#pragma pop_macro("UWVM_AES_DK_GRAY")
#pragma pop_macro("UWVM_AES_GRAY")
#pragma pop_macro("UWVM_AES_CYAN")
#pragma pop_macro("UWVM_AES_PURPLE")
#pragma pop_macro("UWVM_AES_BLUE")
#pragma pop_macro("UWVM_AES_ORANGE")
#pragma pop_macro("UWVM_AES_GREEN")
#pragma pop_macro("UWVM_AES_RED")
#pragma pop_macro("UWVM_AES_BLACK")
